package com.fable.common.utils;

import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.AES;
import lombok.extern.slf4j.Slf4j;

import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

/**
 * @Author : guozhenhu
 * @date: 2023/8/31
 * 密钥必须为16字节或者16字节的倍数的字节型数据。
 * 明文必须为16字节或者16字节的倍数的字节型数据，如果不够16字节需要进行补全。
 */
@Slf4j
public class AesUtil {

    //长度为16位的盐值
    private static final String IV_KEY = "guozhenhu123@com";

    private static AES aes = null;

    // 构建
    static {
        aes = new AES(Mode.CBC, Padding.PKCS5Padding, new SecretKeySpec(IV_KEY.getBytes(), "AES"), new IvParameterSpec(IV_KEY.getBytes()));
    }

    /**
     * 加密
     *
     * @param content 加密
     * @return 字符串
     */
    public static String encryptHex(String content) {
        // 加密
        return aes.encryptHex(content);
    }

    /**
     * 解密
     *
     * @param encryptHex 解密
     * @return 字符串
     */
    public static String decryptHex(String encryptHex) {
        // 解密为字符串
        return aes.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8).trim();
    }
}